Software products of all types, whether operating systems or various types of application programs, are frequently provided in multiple “localized”, language specific versions. For instance, a software product may initially be developed in a specific language such as English. Once this original product has been developed and tested, localized versions, in a language appropriate to the market for which the product is intended, may be developed. For example, a product originally developed in English in the United States may be localized to produce a Japanese language version for sale in Japan. The process of creating a localized version is herein referred to as “localization.”
A common method of localization, is known as internal localization. Internal localization typically involves changing or re-coding the source code of the original software product to produce the localized version. For example, all of the elements of the user interface, messages, help information, and other language specific parts of the software product are translated and re-coded.
However, since the source code of the software product is revised and recompiled, testing is required for each internally localized version generated, in addition to the base product, must be tested. Further, testing must be done even for very minor revisions like changing spelling or correcting typographical errors since even such minor revisions require the source code to be recompiled. Since testing is labor intensive, this method can be extremely expensive. In addition to being expensive, internal localization, due to the long time required to test a software product, results in a very slow delivery of localized versions of software products.
Another approach to providing a localized version of a software product has involved providing translation at a display or rendering level. That is, a base product in one, common language is developed, tested and distributed. A display level translation layer is distributed to provide a localized version of the product. The display level translation layer is executed along with the base product. Whenever the base product renders or displays any text, in the language of the base product, the rendering is intercepted and translated to the local language.
However, such a translation layer at the display level not efficient. For example, this translation layer uses a significant amount of system resources since it is constantly translating all messages and user interface elements. Additionally, the display level translation layer cannot accurately translate runtime messages. That is, messages or information such as error messages that are generated at runtime are difficult to handle using a display level translation layer since the messages are dynamically composed at runtime and corresponding translations may not be available. It is with respect to these considerations and others that the present invention has been made.